package lector;

import lector.rome.RomeFactory;

/**
 * Clase que representa la factoria para el Lector RSS; se implementa un patrón
 * Singleton para devolver siempre la misma instancia de la Factory.
 *
 * @author Nicolás Garay
 * @author Alejandro Jacquet
 * @author Rita Romani
 */
public abstract class Factory {
    
    /** Atributo estático que contiene un objeto de una clase que extienda de Factory. */
    private static Factory factory = null;
    
    /**
     * Método estático que devuelve un objeto de una clase que extiende de esta
     * clase, en este caso la clase utilizada es lector.rome.RomeFactory.
     * Implementa el patrón Singleton para devolver el objeto.
     *
     * @return Factory
     * @throws RSSException excepción lanzada por el Lector RSS
     */
    public static Factory getFactory() throws RSSException {
        if (factory == null) {
            factory = new RomeFactory();
        }
        return factory;
    }

    /**
     * Método abstracto que retorna un objeto de una clase que implementa la
     * interface Lector.
     *
     * @return Lector
     */
    public abstract Lector getLector();
}
